// class EventEmitter {
//     constructor() {
//         this.listeners = new Map();
//     }
//     addListener(label, callback) { }
//     removeListener(label, callback) { }
//     emit(label, ...args) { }
// }

// this.listeners使用Map类型保存不同事件对应的监听者的处理函数。 
// addListener和removeListener分别是添加和移除监听函数。 
// emit出发某类事件，并用args传递数据。 


export default class EventEmitter {
    constructor() {
        this.listeners = new Map();
    }

    addListener(label, callback) {
        this.listeners.has(label) || this.listeners.set(label, []);
        this.listeners.get(label).push(callback);
    }
    removeListener(label, callback) {
        let listeners = this.listeners.get(label);
        let index;
        if (listeners && listeners.length) {
            index = listeners.reduce((i, listener, index) => {
                return (isFunction(listener) && listener === callback) ? i = index : i;
            }, -1);
        }
        if (index > -1) {

            listeners.splice(index, 1);
            this.listeners.set(label, listeners);
            return true;
        }

        return false;
    }
    emit(label, ...args) {
        let listeners = this.listeners.get(label);
        if (listeners && listeners.length) {
            listeners.forEach((listener) => {
                listener(...args);
            })
            return true;
        }

        return false;
    }
}